String হল Java-এর সবচেয়ে ব্যবহৃত ডেটা টাইপগুলির একটি, যা টেক্সট বা চরিত্রের সিকোয়েন্স প্রতিনিধিত্ব করে। Java-তে স্ট্রিং তৈরি করার দুটি প্রধান উপায় রয়েছে:
- String Literal ব্যবহার করে স্ট্রিং তৈরি করা।
- String Object ব্যবহার করে স্ট্রিং তৈরি করা।
এটি খুবই গুরুত্বপূর্ণ কারণ String ক্লাসের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে, যা পারফরম্যান্স এবং মেমরি ব্যবস্থাপনা প্রভাবিত করতে পারে।
1. String Literal (String Pool):
String Literal হল স্ট্রিং তৈরি করার একটি পদ্ধতি যেখানে স্ট্রিংটি সরাসরি String Pool (string constant pool) এ সংরক্ষণ করা হয়। যখন আপনি একটি স্ট্রিং literal ব্যবহার করেন, তখন Java এর String Pool চেক করে দেখতে যে স্ট্রিংটি আগে থেকে সেখানে রয়েছে কিনা। যদি থাকে, তাহলে পূর্ববর্তী অবজেক্টটি রিটার্ন করা হয়, অন্যথায় নতুন অবজেক্ট তৈরি করা হয় এবং স্ট্রিং পুলে রাখা হয়।
String Pool হল Java-এ একটি বিশেষ জায়গা যেখানে সমস্ত স্ট্রিং literals সংরক্ষণ করা হয়। এটি মেমরি ব্যবস্থাপনার জন্য সহায়ক এবং একই মানের স্ট্রিং-এর জন্য পুনঃব্যবহারযোগ্যতা নিশ্চিত করে।
String Literal Example:
public class StringLiteralExample {
public static void main(String[] args) {
String str1 = "Hello"; // String literal
String str2 = "Hello"; // Same literal, same object in string pool
System.out.println(str1 == str2); // Output: true
}
}
Explanation:
- যখন আপনি
"Hello"স্ট্রিং literal ব্যবহার করেন, এটি String Pool এ যোগ হয়। - পরবর্তীতে যখন আপনি আবার
"Hello"ব্যবহার করেন, Java String Pool চেক করে এবং পূর্বের স্ট্রিং অবজেক্টটি রিটার্ন করে। তাইstr1 == str2সত্য হবে।
Advantages:
- Memory Efficiency: একই মানের স্ট্রিং যদি বারবার ব্যবহৃত হয়, তবে এটি String Pool এ সংরক্ষণ করা হয় এবং পুনরায় ব্যবহৃত হয়, যার ফলে মেমরি কম ব্যবহার হয়।
- Performance: একাধিক স্ট্রিং literal-এর জন্য একই অবজেক্ট ব্যবহার হওয়ার ফলে পারফরম্যান্স উন্নত হয়।
2. String Object (Using the new Keyword):
String Object তৈরি করার সময় new কিওয়ার্ড ব্যবহার করা হয়, যা একটি নতুন String object তৈরি করে। এটি স্ট্রিং পুলে স্টোর হয় না, বরং একটি নতুন অবজেক্ট তৈরি হয়। এতে memory overhead এবং performance issues হতে পারে, কারণ নতুন অবজেক্ট তৈরি করার জন্য অতিরিক্ত মেমরি এবং সময় লাগে।
String Object Example:
public class StringObjectExample {
public static void main(String[] args) {
String str1 = new String("Hello"); // New String object
String str2 = new String("Hello"); // Another new String object
System.out.println(str1 == str2); // Output: false
}
}
Explanation:
- এখানে,
"Hello"স্ট্রিং literal ব্যবহার করা হলেও,new String("Hello")এর মাধ্যমে একটি নতুন অবজেক্ট তৈরি হচ্ছে। এতে স্ট্রিং পুলে অবজেক্ট সংরক্ষণ করা হয় না। str1 == str2এfalseরিটার্ন হবে কারণ দুইটি আলাদা অবজেক্ট তৈরি হয়েছে, যদিও তাদের মান সমান।
Disadvantages:
- Memory Consumption:
newকিওয়ার্ড ব্যবহার করে স্ট্রিং তৈরি করা হয়, যার ফলে একটি নতুন অবজেক্ট তৈরি হয়, যা মেমরি বেশি ব্যবহার করে। - Performance: এটি স্ট্রিং পুলের সুবিধা গ্রহণ করে না, তাই এর পারফরম্যান্স কিছুটা কম হতে পারে।
String Literal vs String Object:
| Criteria | String Literal | String Object (using new) |
|---|---|---|
| Memory Efficiency | স্ট্রিং পুল ব্যবহার করে, একাধিক স্ট্রিং একই অবজেক্টের মাধ্যমে ব্যবহার করা যায়। | নতুন অবজেক্ট তৈরি হয় এবং স্ট্রিং পুলে সংরক্ষিত হয় না। |
| Performance | দ্রুত, কারণ String Pool ব্যবহার করা হয় এবং এক্সিস্টিং অবজেক্ট ব্যবহার হয়। | ধীর, কারণ নতুন অবজেক্ট তৈরি হয়। |
| Reusability | একই মানের স্ট্রিং বারবার ব্যবহৃত হলে এটি String Pool থেকে পুনরায় ব্যবহার করা হয়। | নতুন অবজেক্ট তৈরি হওয়ায় পুনঃব্যবহারযোগ্যতা কম। |
| Equality Check | == অপারেটর ব্যবহার করে সত্য বা মিথ্যা চেক করলে একে অপরের সাথে সরাসরি তুলনা করা হয়। | == অপারেটর ব্যবহার করলে false রিটার্ন করবে, কারণ আলাদা অবজেক্ট তৈরি হয়। |
When to Use String Literal and String Object:
- Use String Literal:
- যখন আপনি নিশ্চিত যে একই মানের স্ট্রিং একাধিক জায়গায় ব্যবহৃত হবে। এতে মেমরি এবং পারফরম্যান্স উভয়ই উন্নত হবে।
- String Pool ব্যবহার করতে চাইলে এটি সবচেয়ে উপযুক্ত।
- Use String Object (
new String()):- যখন আপনি একটি নতুন স্ট্রিং অবজেক্ট তৈরি করতে চান এবং সেটি স্ট্রিং পুলে সংরক্ষণ করতে চান না।
- সাধারণত খুব কম ব্যবহৃত স্ট্রিং বা থ্রেডের মধ্যে পৃথক মানের জন্য ব্যবহার করা হয়, যদিও এটা কম প্রচলিত।
- String Literal হল Memory Efficient এবং Performance Optimized যেহেতু এটি String Pool ব্যবহার করে এবং পুনঃব্যবহারযোগ্য।
- String Object (যে
newকিওয়ার্ড ব্যবহার করে তৈরি করা হয়) একাধিক নতুন অবজেক্ট তৈরি করে, যার ফলে মেমরি বেশি ব্যবহার হয় এবং পারফরম্যান্স কম হতে পারে।
Java-তে স্ট্রিং ব্যবহারের ক্ষেত্রে String Literal ব্যবহারের জন্য একটি ভালো অভ্যাস, কিন্তু যখন আপনি নির্দিষ্টভাবে নতুন স্ট্রিং অবজেক্ট তৈরি করতে চান, তখন String Object ব্যবহার করা যেতে পারে।
Read more